package com.ftg.learn.chapter02.java.pool;

import java.util.HashMap;
import java.util.Map;

/**
 * 学习容器 -
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/12/25 上午8:27
 */
public class First {

    public static  void main(String[] args) {
        Map<String,Object> containers = new HashMap<>(4);

        //实例化 四个动物类 到containers里面

        //给我写一个方法 createInstance();
        First f = new First();
        Dog dog = (Dog)f.createInstance("dog");

        System.out.println(dog.toString());


        f.createInstance2(AnimalsEnum.dog);

        Dog dog1 = f.createInstance3(Dog.class);
        System.out.println(dog1);


        //value = abc  4128
//        int hash = 0;
//        public int hashCode() {
//            int h = hash;
//            char val[] = {a,b,c};
//
//            //a h 65  h 31 * 65 + 66 = c h  31 * 65 + 66 * 31 + 67
//            for (int i = 0; i < value.length; i++) {
//                h = 31 * h + val[i];
//            }
//            hash = h;
//            return h;
//        }
//         =
//        System.out.println(31 * 65 + 66 * 31 + 67);
//        System.out.println(Integer.toHexString(14));
//
//       EEEEEEEEE = 十进制
//       一个字符 -- 一个字节（两字节） -- [][][][][][1][6][e]
//        256*14 + 16*14 + 14 = 366
//        62378163782617362781638217832781
//        1010101010101010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
//
//        FFFFFFFFFFFFFFFFFFFFFFFFF

    }

    public Animals createInstance(){
        //有可能是狗  猫  狮  老虎
        return new Dog();
    }

    /**
     * 第一种
     */
    public Animals createInstance(String type){
        //有可能是狗  猫  狮  老虎
        if(type.equals("dog")){
            return new Dog();
        }else if (type.equals("cat")){
            return new Cat();
        }else if (type.equals("tiger")){
            return new Tiger();
        }else if (type.equals("lion")){
            return new Lion();
        }
        return null;
    }

    /**
     * 第二种 :  事爹 (。。。)  QA
     */
    public Animals createInstance1(String type) {
        //有可能是狗  猫  狮  老虎
        switch (type) {
            case "dog":
                return new Dog();
            case "cat":
                return new Cat();
            case "tiger":
                return new Tiger();
            case "lion":
                return new Lion();
            default:
                return null;
        }
    }

    /**
     * 第三种
     * @param type
     * @return
     */
    public Animals createInstance2(AnimalsEnum type) {
        //有可能是狗  猫  狮  老虎
       if(type.equals(AnimalsEnum.dog)){
           return new Dog();
       }else if (type.equals(AnimalsEnum.cat)){
           return new Cat();
       }else if (type.equals(AnimalsEnum.tiger)){
           return new Tiger();
       }else if (type.equals(AnimalsEnum.lion)){
           return new Lion();
       }
       return null;
    }

    /**
     * 第四种
     */
    public <T> T createInstance3(Class<T> clazz) {
        try {
            return clazz.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }

}
